#pragma once

#include <gofcl_usbfs_r.h>

typedef struct {
	u32_s IEP0I : 1;
	u32_s IEP1I : 1;
	u32_s IEP2I : 1;
	u32_s IEP3I : 1;
	u32_s : 12;
	u32_s OEP0I : 1;
	u32_s OEP1I : 1;
	u32_s OEP2I : 1;
	u32_s OEP3I : 1;
	u32_s : 12;
} usbfs_daepint_s;

_Static_assert(sizeof(usbfs_daepint_s) == 4,
	       "Struct usbfs_daepint_s defined error!");

static inline void usbfs_wreg_daepinten_s(usbfs_daepint_s daepint) {
	union {
		usbfs_daepint_s d;
		u32_s u;
	} du = {
		.d = daepint,
	};
	usbfs_wreg(USBFS_DAEPINTEN_R, du.u);
}

static inline usbfs_daepint_s usbfs_rreg_daepinten_s(void) {
	union {
		usbfs_daepint_s d;
		u32_s u;
	} du = {
		.u = usbfs_rreg(USBFS_DAEPINTEN_R),
	};
	return du.d;
}

static inline usbfs_daepint_s usbfs_rreg_daepint_s(void) {
	union {
		usbfs_daepint_s d;
		u32_s u;
	} du = {
		.u = usbfs_rreg(USBFS_DAEPINT_R),
	};
	return du.d;
}
